package interfaz;

import java.sql.SQLException;

import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.JButton;

import modelo.CentroEstudios;
import modelo.Software;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTabbedPane;
import javax.swing.JPanel;
import java.awt.FlowLayout;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class VAnadirSoft extends JInternalFrame {
	private CentroEstudios centroEstudios;
	private JTextField txtCod;
	private JTextField txtNombre;
	private JTextArea txtDatos;
	private JTable tabla;
	private DefaultTableModel modelo;
	private JButton btnEliminar, btnAceptar;
		
	public VAnadirSoft(CentroEstudios centroEstudios) {
		
		this.centroEstudios = centroEstudios;
		
		setTitle("Añadir software");
		setClosable(true);
		setBounds(100, 100, 488, 450);
		getContentPane().setLayout(null);
		
		JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
		tabbedPane.setBounds(0, 0, 478, 418);
		getContentPane().add(tabbedPane);
		
		JPanel panel = new JPanel();
		tabbedPane.addTab("Nuevo software", null, panel, null);
		panel.setLayout(null);
		
		JLabel label = new JLabel("Código software:");
		label.setBounds(23, 25, 122, 15);
		panel.add(label);
		
		txtCod = new JTextField();
		txtCod.setBounds(163, 23, 114, 19);
		txtCod.setText("0");
		txtCod.setEditable(false);
		txtCod.setColumns(10);
		panel.add(txtCod);
		
		JLabel label_1 = new JLabel("Nombre:");
		label_1.setBounds(23, 52, 60, 15);
		panel.add(label_1);
		
		txtNombre = new JTextField();
		txtNombre.setBounds(163, 50, 285, 19);
		txtNombre.setColumns(10);
		panel.add(txtNombre);
		
		JLabel label_2 = new JLabel("Descripción:");
		label_2.setBounds(23, 81, 87, 15);
		panel.add(label_2);
		
		btnAceptar = new JButton("Aceptar");
		btnAceptar.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if (btnAceptar.isEnabled()){
					Software software = new Software(txtCod.getText(), txtNombre.getText(), txtDatos.getText());
					try {
						VAnadirSoft.this.centroEstudios.crearSoftware(software);
						JOptionPane.showMessageDialog(VAnadirSoft.this, "El software se ha creado correctamente.", "Software", JOptionPane.INFORMATION_MESSAGE);
						cargarDatos();
						ponerBlancos();
					} catch (SQLException e1) {
						//e1.printStackTrace();
						JOptionPane.showMessageDialog(VAnadirSoft.this, "No se ha podido crear el software.", "Software", JOptionPane.ERROR_MESSAGE);
					}
				}
			}
		});
		btnAceptar.setBounds(200, 295, 89, 25);
		panel.add(btnAceptar);
		
		txtDatos = new JTextArea();
		txtDatos.setLineWrap(true);
		txtDatos.setBounds(163, 81, 285, 181);
		panel.add(txtDatos);
		
		JPanel panel_1 = new JPanel();
		tabbedPane.addTab("Software", null, panel_1, null);
		panel_1.setLayout(null);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(12, 12, 449, 222);
		panel_1.add(scrollPane);
		
		tabla = new JTable();
		scrollPane.setViewportView(tabla);
		
		btnEliminar = new JButton("Eliminar");
		btnEliminar.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if (btnEliminar.isEnabled()){
					Software software = VAnadirSoft.this.centroEstudios.vSoftwares.elementAt(tabla.getSelectedRow());
					try {
						VAnadirSoft.this.centroEstudios.borrarSoftware(software);
						cargarDatos();
						JOptionPane.showMessageDialog(VAnadirSoft.this, "Software borrado correctamente.", "Software", JOptionPane.INFORMATION_MESSAGE);
					} catch (SQLException e1) {
						//e1.printStackTrace();
						JOptionPane.showMessageDialog(VAnadirSoft.this, "No se ha podido borrar el software.", "Software", JOptionPane.ERROR_MESSAGE);
					}
				}
			}
		});
		btnEliminar.setBounds(180, 246, 117, 25);
		panel_1.add(btnEliminar);
		
		//Desactivar paneles
		if (VMain.establecerPermisos(VAnadirSoft.this.centroEstudios.usuario)==2){
			tabbedPane.setEnabledAt(0, false);
			txtCod.setEnabled(false);
			txtNombre.setEnabled(false);
			txtDatos.setEnabled(false);
			btnEliminar.setEnabled(false);
			btnAceptar.setEnabled(false);
			tabbedPane.setSelectedIndex(1);
		}
	
	}
	
	private void generarCodigo() {
		int codigo = 0;
		try {
			codigo = centroEstudios.generarCodigo("SOFTWARE");
			txtCod.setText(Integer.toString(codigo));
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public void setVisible(boolean b){
		super.setVisible(b);
		if (b){
			generarCodigo();
			cargarDatos();
		}
	}
	
	private void cargarDatos(){
		modelo = new DefaultTableModel();
		modelo.addColumn("idSoftware");
		modelo.addColumn("Nombre");
		for (int i=0;i<VAnadirSoft.this.centroEstudios.vSoftwares.size();i++){
			Object[] linea = new Object[2];
			linea[0] = VAnadirSoft.this.centroEstudios.vSoftwares.elementAt(i).getIdSoftware();
			linea[1] = VAnadirSoft.this.centroEstudios.vSoftwares.elementAt(i).getNombre();
			modelo.addRow(linea);
		}
		tabla.setModel(modelo);
	}
	
	public void ponerBlancos(){
		generarCodigo();
		txtNombre.setText("");
		txtDatos.setText("");
	}
}
